package cn.itcast.dao;

import cn.itcast.pojo.Menu;
import cn.itcast.pojo.Role;
import cn.itcast.pojo.User;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

public interface UserDao {

    /**
     * 找到所有用户  进行条件查询
     *
     * @param queryString 查询字符串
     * @return {@link Page<User>}
     */
    public Page<User> findAllUserByCondition(String queryString);

    /**
     * 通过id查找用户
     *
     * @param userId 用户id
     * @return {@link User}
     */
    User findUserById(Integer userId);

    /**
     * 删除用户的id
     *
     * @param id id
     */
    Integer deleteUserById(Integer id);

    /**
     * 添加用户
     *
     * @param user 用户
     */
    void addUser(User user);

    /**
     * 添加用户和角色
     *
     * @param userId     id
     * @param roleId 角色id
     */
    void addUserAndRole(@Param("userId") Integer userId, @Param("roleId") Integer roleId);

    /**
     * 更新用户
     *
     * @param user 用户
     */
    void updateUser(User user);

    /**
     * 删除用户角色表  通过用户id
     *
     * @param id id
     */
    void deleteUserAndRole(Integer id);

    /**
     * 通过用户id找到角色个数
     *
     * @param id id
     * @return {@link Integer}
     */
    Integer findRoleByUserId(Integer id);

    /**
     * 通过用户名找到用户
     *
     * @param username 用户名
     * @return {@link User}
     */
    User findUserByUsername(String username);

    /**
     * 通过用户id查询查询对应角色表集合
     *
     * @param id id
     * @return {@link Set<Role>}
     */
    Set<Role> findRoleSetByUserId(Integer id);

    /**
     * 找到用户菜单  通过用户名
     *
     * @param username 用户名
     * @return {@link Page<Menu>}
     */
    Page<Menu> findUserMenuByUsername(String username);

    /**
     * 通过用户id找到角色id
     *
     * @param id id
     * @return {@link List<Integer>}
     */
    List<Integer> findRoleIdsByUserId(Integer id);
}
